#include <iostream>
#include <fstream>
#include <string>
#include "bundle.h"

// 压缩：
int main(int argc, char *argv[])
{
    if (argc < 3)
        return -1;

    std::cout << "argv[1]是原始文件路径名称" << std::endl;
    std::cout << "argv[2]是压缩包名称" << std::endl;
    std::string ifilename = argv[1];
    std::string ofilename = argv[2];

    std::ifstream ifs;
    ifs.open(ifilename, std::ios::binary); // 打开原始文件
    ifs.seekg(0, std::ios::end);           // 跳转到读写位置末尾
    size_t fsize = ifs.tellg();            // 获取末尾偏移量--⽂件⻓度
    ifs.seekg(0, std::ios::beg);           // 跳转到起始位置
    std::string body;
    body.resize(fsize);
    ifs.read(&body[0], fsize);
    std::string packed = bundle::pack(bundle::LZIP, body); // 以lzip格式将body压缩
    ifs.close();

    std::ofstream ofs;
    ofs.open(ofilename, std::ios::binary);
    ofs.write(&packed[0], packed.size()); // 将压缩后的数据写⼊压缩包⽂件
    ofs.close();
    return 0;
}

// 解压缩
// int main(int argc, char* argv[])
// {
//     if(argc < 3) return -1;

//     std::cout << "argv[1]是压缩包名称" << std::endl;
//     std::cout << "argv[2]是解压缩后的文件名称" << std::endl;
//     std::string ifilename = argv[1];
//     std::string ofilename = argv[2];

//     std::ifstream ifs;
//     ifs.open(ifilename, std::ios::binary); // 打开原始文件
//     ifs.seekg(0, std::ios::end); // 跳转到读写位置末尾
//     size_t fsize = ifs.tellg(); // 获取末尾偏移量--⽂件⻓度
//     ifs.seekg(0, std::ios::beg); // 跳转到起始位置
//     std::string body;
//     body.resize(fsize);
//     ifs.read(&body[0], fsize);
//     std::string unpacked = bundle::unpack(body); // 将body解压缩
//     ifs.close();

//     std::ofstream ofs;
//     ofs.open(ofilename, std::ios::binary);
//     ofs.write(&unpacked[0], unpacked.size()); // 将解压缩后的数据写⼊⽂件
//     ofs.close();
//     return 0;
// }


